Overview

  • Atividade voltada para iniciantes em py;

  • Abordagem comparativa com o RStudio;

  • Tópicos voltados para modelagem estatística;

  • 📧 luizpala@ufla.br

Let’s start?

Roteiro

  1. Breve introdução ao Python;
  2. Algumas bibliotecas;
  3. Uso do Positron para R e Python;
  4. Trabalhando com DataFrames e variáveis;
  5. Construção de modelos de regressão.

Exploratory data analysis

Introdução ao Python

  • Linguagem de programação de alto nível (VHLL - Very High Level Language) criada pelo holandês Guido Van Rossum;

  • Linguagem orientada a objetos (assim como o R);

  • Comunidades ativas;

  • Grande disponibilidade de bibliotecas, código aberto;

  • Pode ser usado em qualquer arquitetura de computadores;

  • GitHub.

Conforme o Python Package Index, (PyPI), mais de 400.000 pacotes.

Instalação do interpretador Python, versão 3.12.6.

Instalação

  • Caminho para o .exe (windows).

  • Para sistemas Linux, via terminal com o apt install python3.12;

Integrated development environment (IDE)

É um conjunto de ferramentas disponíveis em uma interface mais amigável para a programação.

Alguns benefícios:

  • Ajudar os desenvolvedores a serem mais produtivos (POSIT, 2024);
  • Possibilitar uma melhor indentação do código;
  • Presença de um editor, compilador e do debug console.

Algumas IDE’s

Temos também o Google Colaboratory, que é ambiente de desenvolvimento baseado em nuvem que permite executar códigos Python.

Rstudio

Google Colab

Positron

Vista como uma nova IDE para ciência de dados.

Conforme a Appsilon (2024), Positron is a fork of a famous IDE - Visual Studio Code.

Estrutura

Temos uma estrutura similar ao Rstudio e VScode, com:

  • Janela para saídas gráficas;

  • Visualização da base de dados (similar ao View() do R);

  • Botões para ordenamento de variáveis.

Pontos interessantes

  • Similaridade com o RStudio;

  • Acionamento de ajuda em funções (Ex.: help('numpy'));

  • Facilidade de trabalhar com documentos Quarto (.qmd);

  • Instalação de pacotes via ferramenta pip.

Pontos negativos

  • Ainda está em desenvolvimento;

  • Em algumas situações, percebi que o compilador demora para executar tarefas;

  • Interrupção do código (Também ocorre no RStudio).

Instalação

Bibliotecas

Existem uma infinidade de pacotes disponíveis no Python.

Observação: Utilizamos notações do tipo biblioteca.funcao() para evitar conflitos de pacotes, ambiguidades de funções e ter mais clareza. No R: dplyr::funcao().

Para a Estatística os principais pacotes são:

  • NumPy;

  • Pandas;

  • Seaborn;

  • stasmodels;

  • Matplotlib.

Instalação de pacotes

  • Usando o pip, via C:> py get-pip.py no terminal;

  • A partir disso:

    • %pip install nome_do_pacote no console.

NumPy (np)

  • É um pacote desenvolvido para computação científica;

  • Muito útil para análises de dados, no qual possui várias funções que permitem manipular e descrever dados;

  • Funções matemáticas de alto desempenho.

Uso de funções do NumPy

#---------------------
import numpy 
#---------------------
# criando a lista x
x = [1, 2, 3, 4, 5]
x

# acessando os elementos do conjunto 
x[0]
x[4]

# soma do conjunto x
numpy.sum(x)

# media do conjunto x
numpy.sum(x)/len(x)
numpy.mean(x)

# mediana
numpy.median(x)

# outras funcoes
numpy.exp(x)
numpy.sin(x)

Listas e Arrays

  1. As listas permitem armazenar diferentes tipos de dados e possui métodos básicos para manipulação;

  2. Os arrays armazenam elementos do mesmo tipo e permitem operações de vetor e matriz de maneira mais eficiente.

#---------------------
import numpy as np
#---------------------
# criando o conjunto de dados x
x = [1, 2, 3, 4, 5]
y = [10, 11, 12, 13, 14]
z = [10, 12, "bruno", 12]

# visualizando
x
y
z

# concatenando x e y
x + y
len(x+y)

#---------------------
# soma de x + y

## definir como array
x = np.array(x)
y = np.array(y)

## soma
x+y
len(x+y)

## inserindo elementos em x e y
x = np.append(x, 8)
y = np.append(y, 10)

# soma de x e y
x+y

# produto de x * y
x*y

Dados pseudo-aleatórios

Podemos utilizar a biblioteca para gerar dados pseudo-aleatórios provenientes de distribuições como:

  • Normal;
  • Uniforme;
  • Beta;
#---------------------
import numpy as np
#---------------------
# fixando a semente
np.random.seed(1)

# distribuicao normal
help(np.random.normal)

# gerando dados normais
mu = 10
sigma = 2
s = np.random.normal(loc = mu, scale = sigma, size = 1000)

# estatisticas descritivas
np.mean(s) 
np.var(s)

# distribuicao beta
s1 = np.random.beta(a = 1, b = 4, size = 200)
s1

# estatisticas descritivas
np.mean(s1)
np.std(s1)

Alguns módulos básicos

  • Statistics: funções básicas para cálculos estatísticos, como média, mediana, moda, desvio padrão;

  • math: fornece algumas funções para gerar números aleatórios.

Documentação

Uso do módulo Statistics

#---------------------
# modulo statistics
import statistics 
#---------------------

# criando a lista com os dados
dados = [1, 2, 2, 3, 4, 5]

# estatisticas descritivas
statistics.median(dados)
statistics.variance(dados)
statistics.stdev(dados)

# correlacao entre x1 e x2
x1 = [10,12,13,14,15]
x2 = [11,12,13,14,15]
statistics.correlation(x1,x2)

Pandas

Está entre as bibliotecas mais utilizadas no Python.

Sua utilidade no tratamento de dados é enorme, pois com ela você pode lidar tranquilamente com:

  • Organização, manipulação e filtragem de dados;

  • Criação e leitura de DataFrames (df);

  • Agrupamento, resumo e limpeza de dados.

Criação de um df

#------------------
# dataframes com o pandas
#------------------
import pandas as pd

# criando um conjunto de dados
dados = {'Animal': ['Animal 1', 'Animal 2', 'Animal 3', 'Animal 4'],
         'Peso': [480.20, 500.00, 520.40, 580.58],
         'Raca': ['Jersey', 'Holandes', 'Jersey', 'Holandes']}

# data frame com a pandas
dados = pd.DataFrame(dados)
dados

# tipos das variaveis
dados.dtypes

# describe
dados.describe()

# acessando variaveis
dados['Peso'].mean()
dados[['Peso','Raca']]

# medias do peso por raca
dados.groupby(['Raca']).mean('Peso')

# usando a aggregate
dados.groupby('Raca')['Peso'].agg(['mean', 'max', 'var'])

# inserindo uma variavel
dados['Tipo'] = ['primípara','primípara','multípara','primípara']
dados

Importação

Exemplo: Dados de nascimento registrados na Santa Casa de Lavras (.csv e .xlsx).

#------------------
# dataframes com o pandas
#------------------
import pandas as pd

# importando no formato csv
dados1 = pd.read_csv("dados_lavras.csv")
dados1

# importando no formato xlsx
dados1 = pd.read_excel("dados_excel_partos.xlsx")
dados1

# resumo
dados1.describe()

Matplotlib

Também é uma biblioteca muito utilizada, destinada a construção de gráficos. Veja a documentação;

  • Similar à biblioteca ggplot2.

Dispersão

#------------------
# graficos de dispersao
#------------------
import pandas as pd
import matplotlib.pyplot as plt

# importando no formato xlsx
dados1 = pd.read_excel("C:/Users/luizo/OneDrive/Área de Trabalho/Aula python/dados_excel_partos.xlsx",
decimal=",")
dados1

# resumo
dados1['PESO'].describe()

# dispersao entre a idade da mae e o peso
plt.figure(figsize=(10, 6))  
plt.scatter(dados1['IDADEMAE'], dados1['PESO'], color='steelblue',s = 1)
plt.title('Gráfico de dispersão', fontsize=11)
plt.xlabel('Idade da mãe (anos)', fontsize=11)
plt.ylabel('Peso (kg)', fontsize=11)
plt.ylim(0,6)
plt.xlim(0,55)

Regressão

#------------------
# regressoes
#------------------
import pandas as pd
import matplotlib.pyplot as plt
import statsmodels.api as sm
from statsmodels.formula.api import ols


# importando no formato xlsx
dados1 = pd.read_excel("C:/Users/luizo/OneDrive/Área de Trabalho/Aula python/dados_excel_partos.xlsx",
decimal=",")
dados1

# resumo
dados1['PESO'].describe()

# dispersao entre a idade da mae e o peso
plt.figure(figsize=(10, 6))  
plt.scatter(dados1['IDADEMAE'], dados1['PESO'], color='steelblue',s = 1)
plt.title('Gráfico de dispersão', fontsize=11)
plt.xlabel('Idade da mãe (anos)', fontsize=11)
plt.ylabel('Peso (kg)', fontsize=1)
plt.ylim(0,6)
plt.xlim(0,55)

# modelo de regressão
modelo = ols("PESO ~ IDADEMAE", data=dados1)
help(ols)
resumo = modelo.fit()
resumo.summary()
resumo.aic
resumo.rsquared
resumo.params

# predicao
predicao = resumo.predict(dados1)

# histograma
plt.figure(figsize=(8, 6))
plt.hist(predicao, bins=10, color='red', edgecolor='black')
plt.title('Histograma do valores preditos', fontsize=11)
plt.xlabel('Peso', fontsize=11)
plt.ylabel('Frequência', fontsize=11)

Comentários

  • Programação é prática;

  • Há funções que podem ser mais simples e práticas o R;

  • Resolução de problemas.